package Generics;

import java.util.ArrayList;

/**
 * ClassName:GenericsDome003
 * Package:Generics
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/8-11:02
 * @Version:v1.0
 */
public class GenericsDome003 {
    /*需求定义一个方法,形参是一个集合,但是集合中的数据类型不确定*/
    /*此时,泛型里面写的是什么类型,那么只能传递什么类型的数据*/
    public static void main(String[] args) {
        ArrayList<Ye1> list1 = new ArrayList<>();
        ArrayList<Fu1> list2 = new ArrayList<>();
        ArrayList<Zi1> list3 = new ArrayList<>();

        method(list1);
        method(list2);
        method(list3);
    }
    /*
    * 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据
    * 弊端：利利用泛型方法有一个弊端,此时他可以接收任意的数据类型
    *
    * 希望:本方法虽然不确定类型,但是以后我只希望传递Ye Fu Zi
    * 此时我们就可以使用泛型的通配符：
    *    ？ 也表示不确定的类型
    * 他可以进行类型的限定
    * ? extends E：表示可以传递E或者E所以的子类类型
    * ? super E： 表示可以传递E或者E所有的父类类型
    *
    *
    * 应用场景：
    * 1.如果我们在定义类,方法,接口的时候,如果类型不确定,就可以定义泛型类,泛型方法,泛型接口
    * 2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以使用泛型的通配符
    *
    * 泛型通配符：
    * 关键点：可以限定类型的范围*/
    public static void method(ArrayList<? extends Ye1> list){

    }
//    public static void method(ArrayList<? extends Fu1> list){
//
//    }
//    public static void method(ArrayList<? super Fu1> list){
//
//    }
}
class Ye1 {
}

class Fu1 extends Ye1 {
}

class Zi1 extends Fu1 {
}